home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
tools
/
pcd2
/
src
/
wild.has
< prev
Wrap
Text File
|
1997-01-02
|
2KB
|
140 lines
*
* ワイルドカード指定があったら、一つづつオープンしてファイルハンドルを渡す
*
.include doscall.mac
.xdef GetFHdl
.xdef FLG_WILD
.xdef GetFHdl_Break
.xdef Fsize,Fname
* in (a0)~ ファイルネーム 一回目
* in d0.w FileHandle 二回目以降
GetFHdl:
movem.l d1/a0-a2,-(sp)
tas.b (FLG_WILD)
beq NewFile
move.w d0,-(sp)
DOS _CLOSE
addq.l #2,sp
pea FileBuff
DOS _NFILES
addq.l #4,sp
1: tst.l d0 * 一回目の時はpath分離・カレントディレクトリ変更・_FILESでここに戻る
bmi Exit
move.w #0,-(sp)
pea (fn)
DOS _OPEN
addq.l #6,sp
ext.l d0
movem.l (sp)+,d1/a0-a2
rts
GetFHdl_Break:
movem.l d1/a0-a2,-(sp) * ぢつは辻妻合わせ(こんな短いルーチンで最初はバグった)
move.w d0,-(sp)
DOS _CLOSE
addq.l #2,sp
Exit: * 次のファイルが無くなるとここへ来る
tst.b (pathsave)
beq @f
pea (pathsave-1)
DOS _CHDIR
add.l #4,sp
@@:
move.w CURDRV,-(sp)
DOS _CHGDRV
addq.l #2,sp
sf.b (FLG_WILD)
moveq.l #-1,d0
movem.l (sp)+,d1/a0-a2
rts
NewFile:
DOS _CURDRV
move.w d0,CURDRV
move.b (1,a0),d0
cmpi.b #':',d0
bne NoDrv
clr.w d1
move.b (a0),d1
andi.b #$5f,d1
subi.b #'A',d1
move.w d1,-(sp)
DOS _CHGDRV
addq.w #2,sp
cmp.w d1,d0
bmi Drv_err
lea.l (2,a0),a0
NoDrv:
lea.l (a0),a1
lea.l (pathbuff),a2
@@:
move.b (a1)+,(a2)+
bne @b
@@: move.b -(a2),d0
cmpi.b #'\',d0
beq @f
cmpi.b #'/',d0
bne @b
@@:
cmpa.l #pathbuff,a2
bmi NoPath
clr.b (a2)+
pea (pathsave)
clr.w -(sp)
DOS _CURDIR
addq.l #6,sp
pea (pathbuff)
DOS _CHDIR
addq.l #4,sp
tst.l d0
bpl FILES_1st
move.w CURDRV,-(sp) * 指定pathがなかった
DOS _CHGDRV
addq.l #2,sp
moveq.l #-1,d0
movem.l (sp)+,d1/a0-a2
rts
NoPath: * path指定がなかった
clr.b (pathsave)
lea.l (pathbuff),a2
FILES_1st:
move.w #%100000,-(sp)
pea (a2)
pea (FileBuff)
DOS _FILES
lea.l (10,sp),sp
bra 1b
Drv_err: * 指定ドライブがなかった
moveq.l #-1,d0
movem.l (sp)+,d1/a0-a2
rts
.data
.align 4
CURDRV: .dc.w 0
.dc.b '\/'
pathbuff:
.ds.b 128
.dc.b '\'
pathsave:
.ds.b 65
FLG_WILD: .dc.b 0
.bss
.align 4
FileBuff:
.ds.b 26
Fsize: .ds.l 1
Fname:
fn .ds.b 23
.end